百面 模型评估
模型评估主要分为离线评估和在线评估两个阶段。针对分类、排序、回归、序列预测等不同类型的机器学习问题,评估指标的选择也有所不同。知道每种评估指标的精确定义、有针对性地选择合适的评估指标、根据评估指标的反馈进行模型调整,这些都是机器学习在模型评估阶段的关键问题,也是一名合格的算法工程师应当具备的基本功。
评估指标的局限性
在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估。在诸多的评估指标中,大部分指标只能片面地反映模型的一部分性能。如果不能合理地运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。
问题1 准确率(Accuracy)的局限性
问:Hulu的奢侈品广告主们希望把广告定向投放给奢侈品用户。Hulu通过第三方的数据管理平台(Data Management Platform, DMP)拿到了一部分奢侈品用户的数据,并以此为训练集和测试集,训练和测试奢侈品用户的分类模型。该模型的分类准确率超过了95%,但在实际广告投放过程中,该模型还是把大部分广告投给了非奢侈品用户,这可能是什么原因造成的?
答:准确率是指分类正确的样本占总样本个数的比例,即
其中n_corrrct为被正确分类的样本个数,n_total为总样本的个数。
准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。所以,当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。
明确了这一点,这个问题也就迎刃而解了。显然,奢侈品用户只占Hulu全体用户的一小部分,虽然模型的整体分类准确率高,但是不代表对奢侈品用户的分类准确率也很高。在线上投放过程中,我们只会对模型判定的“奢侈品用户”进行投放,因此,对“奢侈品用户”判定的准确率不够高的问题就被放大了。为了解决这个问题,可以使用更为有效的平均准确率(每个类别下的样本准确率的算术平均)作为模型评估的指标。
问题2 精确率(Precision)与召回率的权衡
问题描述:Hulu提供视频的模糊搜索功能,搜索排序模型返回的Top5的精确率非常高,但在实际使用过程中,用户还是经常找不到想要的视频,特别是一些比较冷门的剧集,这可能是哪个环节出了问题呢?
答:精确率是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例。描述返回值的质量。召回率是指分类正确的正样本个数占真正的正样本个数的比例。
在排序问题中,通常没有一个确定的阈值把得到的结果直接判定为正样本或负样本,而是采用Top N返回结果的Precision值和Recall值来衡量排序模型的性能,即认为模型返回的Top N的结果就是模型判定的正样本,然后计算前N个位置上的准确率Precision@N和前N个位置上的召回率Recall@N。
Precision值和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。
模型返回的Precision@5的结果非常好,也就是说排序模型Top 5的返回值的质量是很高的。但在实际应用过程中,用户为了找一些冷门的视频,往往会寻找排在较靠后位置的结果,甚至翻页去查找目标视频。但根据题目描述,用户经常找不到想要的视频,这说明模型没有把相关的视频都找出来呈现给用户。显然,问题出在召回率上。如果相关结果有100个,即使Precision@5达到了100%,Recall@5也仅仅是5%。在模型评估时,我们是否应该同时关注Precision值和Recall值。进一步而言, 应该选取不同的Top N的结果进行观察,应该选取更高阶的评估指标来更全面地反映模型在Precision值和Recall值两方面的表现。最好绘制出模型的PR曲线。
P-R曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R.曲线是通过将阈值从高到低移动而生成的。图P-R曲线样例图中,其中实线代表模型A的P-R曲线,虚线代表模型B的P-R曲线。原点附近代表当阈值最大时模型的精确率和召回率。
由图可见,当召回率接近于0时,模型A的精确率为0.9,模型B的精确率是1,这说明模型B得分前几位的样本全部是真正的正样本,而模型A即使得分最高的几个样本也存在预测错误的情况。并且,随着召回率的增加,精确率整体呈下降趋势。但是,当召回率为1时,模型A的精确率反而超过了模型B。这充分说明,只用某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过PR曲线的整体表现,才能够对模型进行更为全面的评估。
F1 score能综合反映一个排序模型的性能。F1 score是精确率和召回率的调和平均值,定义为:
F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0。
更一般的,我们定Fβ分数为
Fβ的物理意义就是将准确率和召回率这两个分值合并为一个分值,在合并的过程中,召回率的权重是准确率的β倍。F1分数认为召回率和准确率同等重要,F2分数认为召回率的重要程度是准确率的2倍,而F0.5分数认为召回率的重要程度是准确率的一半。
问题3 平方根误差的“意外”
问题描述:Hulu作为一家流媒体公司,拥有众多的美剧资源,预测每部美剧的流量趋势对于广告投放、用户增长都非常重要。我们希望构建一个回归模型来预测某部美剧的流量趋势,但无论采用哪种回归模型,得到的RMSE指标都非常高。然而事实是,模型在95%的时间区间内的预测误差都小于1%,取得了相当不错的预测结果。那么,造成RMSE指标居高不下的最可能的原因是什么?
答:RMSE经常被用来衡量回归模型的好坏,但根据题目的叙述,RMSE这个指标却失效了。RMSE的计算公式如下:
其中,yi是第i个样本点的真实值,y帽i是第i个样本点的预测值,n是样本点的个数。
一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier) 时,即使离群点数量非常少,也会让RMSE指标变得很差。
回到问题中来,模型在95%的时间区间内的预测误差都小于1%,这说明,在大部分时间区间内,模型的预测效果都是非常优秀的。然而,RMSE却一直很差,这很可能是由于在其他的5%时间区间内存在非常严重的离群点。事实上,在流量预估这个问题中,噪声点确实是很容易产生的,比如流量特别小的美剧、刚上映的美剧或者刚获奖的美剧,甚至一-些相关社交媒体突发事件带来的流量,都可能会造成离群点。
针对该问题可以有三种不同的解决方案。1,如果认定这些离群点是噪声点的话,就需要在数据预处理的阶段把这些噪声点过滤掉。第二,如果不认为这些离群点是噪声点的话,就需要进一步提高模型的预测能力,将离散点产生的机制建模进去。第三,可以找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差,MAPE,定义为:
相比RMSE, MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。
ROC曲线
二值分类器( Binary Classifier)是机器学习领域中最常见也是应用最广泛的分类器。评价二值分类器的指标很多,比如 precision、 recall F1 score、PR曲线等。上一小节已对这些指标做了一定的介绍,但也发现这些指标或多或少只能反映模型在某一方面的性能。相比而言,ROC曲线则有很多优点,经常作为评估二值分类器最重要的指标之一。
问题1 什么是ROC曲线?
ROC曲线的横坐标为假阳性率(False Positive Rate,FPR) ;纵坐标为真阳性率, (True Positive Rate, TPR)。FPR和TPR的计算方法分别为
上式中,P是真实的正样本的数量,N是真实的负样本的数量,TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被分类器预测为正样本的个数。发现TPR与Recall是相等的。FPR即为误诊率,公式为
(N被认为P) / N。
举个例子,假设有10位疑似癌症患者,其中有3位很不幸确实患了癌症(P=3),另外7位不是癌症患者(N=7) 。医院对这10位疑似患者做了诊断,诊断出3位癌症患者,其中有2位确实是真正的患者(TP=2) 。那么真阳性率TPR=TP \ P=2\ 3。对于7位非癌症患者来说,有一位很不幸被误诊为癌症患者(FP= 1),那么假阳性率FPR=FP \ N=1\ 7。对于“该医院”这个分类器来说,这组分类结果就对应ROC曲线上的一个点(1\7, 2\3)。
问题2 如何绘制ROC曲线?
事实上,ROC曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的。
在二值分类问题中,模型的输出一般都是预测样本为正例的概率,所以下表中的概率值都为正值的概率,在输出最终的正例,负例之前,我们需要指定一个阈值,预测概率大于该阈值的样本会被判为正例,小于该阈值的样本则会被判为负例。截断点指的是区分正负预测结果的阈值。下图是模型的输出结果,样本按照预测概率从高到低排序。
通过动态地调整截断点,从最高的得分开始(实际上是从正无穷开始,对应着ROC曲线的零点),逐渐调整到最低得分,每一个截断点都会对应一个FPR和TPR,在ROC图上绘制出每个截断点对应的位置,再连接所有点就得到最终的ROC曲线。
例如下图的ROC曲线。
当截断点选择为正无穷时,模型把全部样本预测为负例,那么FP和TP必然都为0,FPR和TPR也都为0,因此曲线的第一个点的坐标就是(0,0)。当把截断点调整为0.9时,模型预测1号样本为正样本,并且该样本确实是正样本,因此,TP=1, 20个样本中,所有正例数量为P=10,故TPR=TP/ P=1/ 10;这里没有预测错的正样本,即FP=0, 负样本总数N=10,故FPR=FP /N=0 /10=0,对应ROC曲线上的点(0,0.1) 。依次调整截断点,直到画出全部的关键点,再连接关键点即得到最终的ROC曲线。不是说以假阳性率为自变量以真阳性率为因变量哦。
还有一种更直观地绘制ROC曲线的方法。首先根据样本标签统计出正负样本的数量,假设正样本数量为P,负样本数量为N。接下来把横轴刻度间隔设置为1 / N,纵轴的刻度间隔设置为1 / P。再根据模型输出的预测概率对样本进行排序(从高到低);依次遍历样本,同时从零点开始绘制ROC曲线,每遇到一个正样本就沿着纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,曲线最终停在(1,1)整个ROC曲线绘制完成。这样就很好理解为什么面积越大,分类性能越好了,想象这个过程即可。
问题3 如何计算AUC?
AUC指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。ROC曲线一般都处于y=x这条直线的上方,如果不是的话,只要把模型预测的概率反转成1-p就可以得到一个更好的分类器。所以AUC的取值一般在0.5至1之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。比如极端好,那就是条x=0这条直线啊。对于不均衡数据来说,AUC衡量的是有没有为了高的召回率来牺牲精确度,越高说明牺牲的越少。
树的AUC的计算
很多机器学习的模型对分类问题的预测结果都是概率,如果要计算accuracy,需要把概率转化为类别,这就需要手动设置一个阈值。可以结合着第一种画AUC的方法来看,对于决策树,这种,可以使用第二种方法比较好理解,当然都用第二种都比较好理解。
AUC缺点
AUC的最大问题在于它并不在乎所有实例的绝对预测数值,而只在乎它们的相对数值。
问题4 ROC曲线相比PR曲线有什么特点?
将测试集中的负样本数量增加10倍后,可以看出PR曲线发生了明显的变化,而ROC曲线形状基本不变。这个特点让ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。实际问题中,正负样本的数量往往很不均衡。比如计算广告领域经常涉及转化率模型,正样本的数量往往是负样本数量的1比1000甚至1比10000。若选择不同的测试集,P-R曲线的变化就会非常大,而ROC曲线则能够更加稳定地反映模型本身的好坏。所以,ROC曲线的适用场景更多,被广泛用于排序、推荐、广告等领域。但需要注意的是,选择P-R曲线还是ROC曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。
AB测试
问题1
问:在对模型进行过充分的离线评估后,为什么还要进行在线AB测试?
答:需要进行在线A/B测试的原因如下。
(1)离线评估无法完全消除模型过拟合的影响,因此,得出的离线评估结果无法完全替代线上评估结果。
(2)离线评估无法完全还原线上的工程环境。一般来讲, 离线评估往往不会考虑线上环境的延迟、数据丢失、标签数据缺失等情况。因此,离线评估的结果是理想工程环境下的结果。
(3)线上系统的某些商业指标在离线评估中无法计算。离线评估一般是针对模型本身进行评估,而与模型相关的其他指标,特别是商业指标,往往无法直接获得。比如,上线 了新的推荐算法,离线评估往往关注的是ROC曲线、P-R曲线等的改进,而线上评估可以全面了解该推荐算法带来的用户点击率、留存时长、PV访问量等的变化。这些都要由A/B测试来进行全面的评估。
问题2 如何进行线上AB测试?
答:进行AB测试的主要手段是进行用户分桶,即将用户分成实验组和对照组,对实验组的用户施以新模型,对对照组的用户施以旧模型。在分桶的过程中,要注意样本的独立性和采样方式的无偏性,确保同一个用户每次只能分到同一个桶中,在分桶过程中所选取的user_id需要是一个随机数,这样才能保证桶中的样本是无偏的。
模型评估的方法
在机器学习中,我们通常把样本分为训练集和测试集,训练集用于训练模型,测试集用于评估模型。在样本划分和模型验证的过程中,存在着不同的抽样方法和验证方法。
问题1
问:在模型评估过程中,有哪些主要的验证方法,它们的优缺点是什么?
答:
(1)Holdout检验
Holdout检验是最简单也是最直接的验证方法,它将原始的样本集合随机划分成训练集和验证集两部分。比方说,对于一个点击率预测模型,我们把样本按照70%~30%的比例分成两部分,70%的样本用于模型训练; 30%的样本用于模型验证,包括绘制ROC曲线、计算精确率和召回率等指标来评估模型性能。
Holdout检验的缺点很明显,即在验证集上计算出来的最后评估指标与原始分组有很大关系。为了消除随机性,研究者们引入了“交叉检验”的思想。
(2)交叉检验
k-fold交叉验证:首先将全部样本划分成k个大小相等的样本子集;依次遍历这k个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估;最后把k次评估指标的平均值作为最终的评估指标。在实际实验中,经常取10。
(3)自助法
不管是Holdout检验还是交叉检验,都是基于划分训练集和测试集的方法进行模型评估的。然而,当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果。
自助法是基于自助采样法的检验方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证,这就是自助法的验证过程。
问题2
问:在自助法的采样过程中,对n个样本进行n次自助抽样,当n趋于无穷大时,最终有多少数据从未被选择过?
根据重要极限,当样本量很大时,大约有0.368的样本从未被选择过,可做为验证集。